import MBCore from './mb_core'

class MBUtils {
    formatDate(date: any, fmt: any) { //author: meizz
        var o:any = {
            "M+": date.getMonth() + 1, //月份
            "d+": date.getDate(), //日
            "h+": date.getHours(), //小时
            "m+": date.getMinutes(), //分
            "s+": date.getSeconds(), //秒
            "q+": Math.floor((date.getMonth() + 3) / 3), //季度
            "S": date.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
        for (var k in o)
            if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        return fmt;
    }

    parseDate(str: any, fmt: any) {
        fmt = fmt || 'yyyy-MM-dd';
        var obj: any = { y: 0, M: 1, d: 0, H: 0, h: 0, m: 0, s: 0, S: 0 };
        fmt.replace(/([^yMdHmsS]*?)(([yMdHmsS])\3*)([^yMdHmsS]*?)/g, (m: any, $1: any, $2: any, $3: any, $4: any, idx: any, old: any) => {
            str = str.replace(new RegExp($1 + '(\\d{' + $2.length + '})' + $4), function (_m: any, _$1: any) {
                obj[$3] = parseInt(_$1);
                return '';
            });
            return '';
        });
        obj.M--; // 月份是从0开始的，所以要减去1
        var date = new Date(obj.y, obj.M, obj.d, obj.H, obj.m, obj.s);
        if (obj.S !== 0) date.setMilliseconds(obj.S); // 如果设置了毫秒
        return date;
    }


    /**
     * 是否正整数（即大于0的整数）。
     *
     * @param int
     * @returns {boolean}
     */
    isPositiveInteger(int: any) {
        if (!(/(^[1-9]\d*$)/.test(int))) {
            return false;
        }
        return true;
    };

    /**
     * 在JS中返回当前系统的时间戳。
     *
     * @returns {number} 形如：1280977330748 的长整数
     */
    getCurrentUTCTimestamp () {
        return new Date().getTime();
    };

    /**
     * 利用指定的WebSocket对象发送网络数据。
     *
     * @param websocket {WebSocket} Websocket对象引用
     * @param dataWithString {String} 数据文本
     *
     * @return {boolean} false表示数据发送时出错了（发送失败），理论上说true只代表没有发送失败但不代表一
     *                   定发送成功，因为netty的Websocket发送是异步的）
     */
    send (websocket:any, dataWithString:any) {
        let sendSucess = false;

        if (websocket && dataWithString) {
            
            if (websocket.readyState === 1) {
                try {
                    // api文档：https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket/send
                    websocket.send(dataWithString);
                    sendSucess = true;

                    if (MBCore.debugEnabled())
                        console.log('MBUtils', ">> 数据已成功发出[dataLen=" + dataWithString.length + "].")
                } catch (e) {
                    console.log('MBUtils', "send方法中》》发送TCP数据报文时出错了，原因是：", e);
                }
            } else {
                console.log('MBUtils', "send方法中》》无法发送websocket数据，原因是：skt.readyState=" + websocket.readyState);
            }
        } else {
            console.log('MBUtils', "send方法中》》无效的参数：skt==null || d == null!");
        }

        return sendSucess;
    }
}

export default new MBUtils();